package es.uma.scgt.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import es.uma.scgt.dao.UsuarioDao;
import es.uma.scgt.modelo.Equipo;
import es.uma.scgt.modelo.Usuario;

@Repository
public class UsuarioDaoJpa implements UsuarioDao {

	@Autowired
	private SessionFactory session;
	
	public Usuario encuentraUsuarioPorId(int usuarioId) {
		return (Usuario)session.getCurrentSession().get(Usuario.class, usuarioId);
	}
	
	public Usuario crearUsuarioNuevo(Usuario usuario) {
		session.getCurrentSession().save(usuario);
		return usuario;
	}
	
	public Usuario editarUsuario(Usuario usuario){
		session.getCurrentSession().update(usuario);
		return encuentraUsuarioPorId(usuario.getId());
	}
	
	
	public void borrarUsuario(int studentId) {
		Usuario usuario = encuentraUsuarioPorId(studentId);
//		session.getCurrentSession().delete(usuario);
		usuario.setActive(0);
		editarUsuario(usuario);
	}

	
	public Usuario getUserByUsernamePassword(String email, String contrasena) {
		return (Usuario) session.getCurrentSession().createQuery("from Usuario u where u.email = :email and u.password = :password").setParameter("email", email).setParameter("password", contrasena);
	}
	
	

	@SuppressWarnings("unchecked")
	public List<Usuario> usuarioPorEmail(String email) {
		return session.getCurrentSession().createQuery("from Usuario u where u.email = :email").setParameter("email", email).list();
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> getTodosUsuarios(){
		return session.getCurrentSession().createQuery("from Usuario").list();
	}

	public void actualizarContrasena(int usuarioId, String contrasena,
		String contrasena2) {
		Usuario usuario = encuentraUsuarioPorId(usuarioId);
		usuario.setPassword(contrasena2);
		editarUsuario(usuario);

	}

	@SuppressWarnings("unchecked")
	public List<Usuario> getSoloActives() {
		
		return session.getCurrentSession().createQuery("from Usuario u where u.active = 1").list();
	}

	@SuppressWarnings("unchecked")
	public List<Integer> EquiposPertenezcaUsuario(Usuario usuario){
		int usuarioid = usuario.getId();
		List<Integer> EquipoID;
		
		//Para crear un SQL normal
		EquipoID = session.getCurrentSession().createSQLQuery("Select equipoId from usuario_equipo ue where ue.usuario ="+ usuarioid).list();
		return EquipoID;
		//(List<Equipo>) session.getCurrentSession().createQuery("from equipo e where e.usuarios = :usuario").setParameter("usuario", usuario);
		
	}


}
